/**
 * 异步编程有很多特有的代码设计模式，为了实现相同的功能，使用同步方式和异步方式编写的代码会有很大差异。*/

/**
 * 函数返回值
 */
//使用一个函数的输出作为另一个函数的输入时很常见的需求，在同步方式下一般按以下方式编码
var output = fn1(fn2('input'));

//而在异步方式下，由于函数执行结果不是通过返回值，而是通过回调函数传递，因此一般按以下方式编码
fn2('input',function(output2){
  fn1(output2,function(output1){
    //do something
  });
});
//可以看出，这种方式就是回调函数套回调函数，套的太多了很容易写出 > 形状的代码.


/**
 * 遍历数组*/
//在遍历数组时，使用某个函数依次对数据成员做一些处理也是常见的需求。如果函数是同步执行的，一般会写出以下代码
var len = arr.length,
  i = 0;
for(;i<len;++i){
  arr[i] = sync(arr[i]);
}




